// components/listFilter/index.js
Component({
    options: {
        addGlobalClass: true,
    },
    /**
     * 组件的属性列表
     */
    properties: {
        show: {
            type: Boolean
        },
        filterType: {
            type: String
        }
    },
    /**
     * 组件的初始数据
     */
    data: {
        levelActions: [{
                name: "会员等级1",
                value: 1,
            },
            {
                name: "会员等级2",
                value: 2,
            }
        ],
        levelShow: false,
        levelName: "",
        levelValue: null, // 会员等级
        // 时间范围
        startTimeShow: false,
        endTimeShow: false,
        startTimeName: "",
        endTimeName: "",
        startTimeValue: new Date().getTime(), // 开始时间
        endTimeValue: new Date().getTime(), // 结束时间
        // 有效周期
        effectiveStartTimeShow: false,
        effectiveEndTimeShow: false,
        effectiveStartTimeName: "",
        effectiveEndTimeName: "",
        effectiveStartTime: new Date().getTime(), // 开始时间
        effectiveEndTime: new Date().getTime(), // 结束时间
        // 时间组件配置
        minDate: new Date(2020, 1, 1).getTime(),
        maxDate: new Date().getTime(),
        formatter(type, value) {
            if (type === 'year') {
                return `${value}年`;
            }
            if (type === 'month') {
                return `${value}月`;
            }
            if (type === 'day') {
                return `${value}日`;
            }
            return value;
        },
    },
    /**
     * 组件的方法列表
     */
    methods: {
        // 关闭组件
        onClose() {
            this.triggerEvent('onClose', {
                show: false
            })
        },
        // 选择会员等级
        openLevelAction() {
            this.setData({
                levelShow: true
            })
        },
        // 确认会员等级
        onLevelSelect(e) {
            this.setData({
                levelName: e.detail.name,
                levelValue: e.detail.value
            })
            this.onLevelClose()
        },
        // 关闭会员等级
        onLevelClose() {
            this.setData({
                levelShow: false
            })
        },
        // 时间范围-开始时间-选择
        openStartTimeAction() {
            this.setData({
                startTimeShow: true
            })
        },
        // 时间范围-开始时间-取消
        onStartTimeCancel() {
            this.setData({
                startTimeShow: false
            })
        },
        // 时间范围-开始时间-确认
        onStartTimeConfirm(e) {
            let date = new Date(e.detail)
            this.setData({
                startTimeValue: e.detail,
                startTimeName: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
                startTimeShow: false
            })
        },
        // 时间范围-结束时间-选择
        openEndTimeAction() {
            if (this.data.startTimeName == "") {
                wx.showToast({
                    title: '请选择开始时间',
                    icon: 'none'
                })
                return
            }
            this.setData({
                endTimeShow: true
            })
        },
        // 时间范围-结束时间-取消
        onEndTimeCancel() {
            this.setData({
                endTimeShow: false
            })
        },
        // 时间范围-结束时间-确认
        onEndTimeConfirm(e) {
            if (e.detail <= this.data.startTimeValue) {
                wx.showToast({
                    title: '结束时间不能小于开始时间',
                    icon: 'none'
                })
                this.setData({
                    endTimeShow: false
                })
                return
            }
            let date = new Date(e.detail)
            this.setData({
                endTimeValue: e.detail,
                endTimeName: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
                endTimeShow: false
            })
        },
        // 有效周期-开始时间-选择
        openEffectiveStartTimeAction() {
            this.setData({
                effectiveStartTimeShow: true
            })
        },
        // 有效周期-开始时间-取消
        onEffectiveStartTimeCancel() {
            this.setData({
                effectiveStartTimeShow: false
            })
        },
        // 有效周期-开始时间-确认
        onEffectiveStartTimeConfirm(e) {
            let date = new Date(e.detail)
            this.setData({
                effectiveStartTime: e.detail,
                effectiveStartTimeName: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
                effectiveStartTimeShow: false
            })
        },
        // 有效周期-结束时间-选择
        openEffectiveEndTimeAction() {
            if (this.data.effectiveStartTimeName == "") {
                wx.showToast({
                    title: '请选择开始时间',
                    icon: 'none'
                })
                return
            }
            this.setData({
                effectiveEndTimeShow: true
            })
        },
        // 有效周期-结束时间-取消
        onEffectiveEndTimeCancel() {
            this.setData({
                effectiveEndTimeShow: false
            })
        },
        // 有效周期-结束时间-确认
        onEffectiveEndTimeConfirm(e) {
            if (e.detail <= this.data.effectiveStartTime) {
                wx.showToast({
                    title: '结束时间不能小于开始时间',
                    icon: 'none'
                })
                this.setData({
                    effectiveEndTimeShow: false
                })
                return
            }
            let date = new Date(e.detail)
            this.setData({
                effectiveEndTime: e.detail,
                effectiveEndTimeName: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,
                effectiveEndTimeShow: false
            })
        },
        // 筛选条件确认
        onConfirm() {
            if (this.data.startTimeName != "" && this.data.endTimeName == "") {
                wx.showToast({
                    title: '请选择结束时间',
                    icon: 'none'
                })
                return
            }
            if (this.data.effectiveStartTimeName != "" && this.data.effectiveEndTimeName == "") {
                wx.showToast({
                    title: '请选择结束时间',
                    icon: 'none'
                })
                return
            }
            let filterData = {
                level: this.data.levelValue,
                startTime: this.data.startTimeValue,
                endTime: this.data.endTimeValue,
                effectiveStartTime: this.data.effectiveStartTime,
                effectiveEndTime: this.data.effectiveEndTime,
            }

            // 清除未筛选的字段
            if (this.data.startTimeName == "") {
                delete filterData.startTime
            }
            if (this.data.endTimeName == "") {
                delete filterData.endTime
            }
            if (this.data.effectiveStartTimeName == "") {
                delete filterData.effectiveStartTime
            }
            if (this.data.effectiveEndTimeName == "") {
                delete filterData.effectiveEndTime
            }
            Object.keys(filterData).forEach(key => {
                if (filterData[key] == "" || filterData[key] == null || !filterData[key]) {
                    delete filterData[key]
                }
            })

            this.triggerEvent('onConfirm', {
                show: false,
                filterData
            })

            // 清空筛选条件
            this.setData({
                levelName: "",
                levelValue: null,
                startTimeName: "",
                endTimeName: "",
                startTimeValue: new Date().getTime(), // 开始时间
                endTimeValue: new Date().getTime(), // 结束时间
            })
        },
    }
})